﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Databas
{
    public class Databashantering
    {
        Data2DataContext databas = new Data2DataContext();

        public bool SubmitChanges()
        {
            try
            {
                databas.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        #region Sätter högsta id

        //Sätter högsta ftagarid
        public int getHighestFtagareId()
        {
            try
            {
                var query =
                (from b in databas.Forsakringstagares
                 select (b.fTagareID)).Max();
                return query + 1;
            }
            catch
            {
                return 1;
            }
        }
        //Sätter högsta grunddataid
        public int getHighestgrundDataId()
        {
            try
            {
                var query =
                (from b in databas.ForsakringsUtbuds
                 select (b.grundDataID)).Max();
                return query + 1;
            }
            catch
            {
                return 1;
            }
        }
        //Sätter högsta provisionid
        public int getHighestProvisionId()
        {
            try
            {
                var query =
                (from b in databas.ForsakringsUtbuds
                 select (b.grundDataID)).Max();
                return query + 1;
            }
            catch
            {
                return 1;
            }
        }
        
        #endregion

        #region Login/Lösenord

        //Loggar in användare
        public bool loggarIN(string losenord, int agenturNr)
        {
                var query =
                    from anstalld in databas.Anstallds
                    where anstalld.losenord == losenord && anstalld.agenturNr == agenturNr
                    select anstalld;

            if (query.Count() == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //Byter lösneord        
        public bool Bytalosenord(string gammaltLosen, string nyLosen, Anstalld a)
        {
            var losenByte =
                from anstalld in databas.Anstallds
                where anstalld.agenturNr == a.agenturNr &&
                      anstalld.losenord == gammaltLosen
                      select anstalld;


            if (losenByte.Count() == 0)
            return false;

            //Byter lösenordet.
            losenByte.First().losenord = nyLosen;

            //Uppdaterar datbasen.
            databas.SubmitChanges();

            return true;
        }
        
        #endregion

        #region//Hämta funktioner

        public List<Provision> hamtaProvisioner()
        {
            List<Provision> provision = new List<Provision>();
            var query =
                from p in databas.Provisions
                select p;
            foreach (Provision g in query)
            {
                provision.Add(g);
            }
            return provision;
        }
        //Hämtar alla anställda
        public List<Anstalld> HamtaAllaAnstallda()
        {
            List<Anstalld> anstalldas = new List<Anstalld>();
         
            var query =
                from anstallda in databas.Anstallds
                select anstallda;

            foreach (Anstalld a in query)
            {
                anstalldas.Add(a);
            }

            return anstalldas;
        }
        //Hämtar behörighets id
        public Anstalld hamtaBehorighetsId(Int64 persNr)
        {
            var query =
                (from b in databas.Anstallds
                 where b.personNr == persNr
                 select b).Single();
            return query;
        }
        //Hämtar agenturnr
        public Anstalld HamtaAnstalldViaAgentNr(int agenturNr)
        {
            var query =
                (from b in databas.Anstallds
                 where b.agenturNr == agenturNr
                 select b).Single();
            return query;
        }
        //Hämtar lösenord
        public string Hamtalösen(long persNr)
        {
            var query =
                (from b in databas.Anstallds
                 where b.personNr == persNr
                 select b.losenord).Single();
            return query;
        }
        //Hämtar personförsäkring
        public List<Forsakring> HamtaPersonForsakring()
        {
            List<Forsakring> forsakrings = new List<Forsakring>();

            var query =
                from person in databas.Forsakrings
                where person.forsakringstyp == "Person"
                select person;

            foreach (Forsakring f in query)
            {
                forsakrings.Add(f);
            }
            return forsakrings;
        }
        //Hämtar personOchÖvrig försäkring
        public List<Forsakring> HamtaPersonOchOvrig()
        {
            List<Forsakring> forsakrings = new List<Forsakring>();

            var query =
                from person in databas.Forsakrings
                where (person.forsakringstyp == "Person"
                || person.forsakringstyp == "Ovrig") && person.betaldDatum == null
                select person;

            foreach (Forsakring f in query)
            {
                forsakrings.Add(f);
            }
            return forsakrings;
        }
        //Hämtar övrigpersonförsäkring
        public List<Forsakring> HamtaOvrigPerson()
        {
            List<Forsakring> OvrigPerson = new List<Forsakring>();

            var query =
                from op in databas.Forsakrings
                where op.forsakringstyp == "Ovrig"
                select op;

            foreach (Forsakring f in query)
            {
                OvrigPerson.Add(f);
            }
            return OvrigPerson;
        }
        //Hämtar företagsförsäkring
        public List<Forsakring> HamtaForetag()
        {
            List<Forsakring> Foretag = new List<Forsakring>();

            var query =
                from foretag in databas.Forsakrings
                where foretag.forsakringstyp == "Foretag" && foretag.betaldDatum == null
                select foretag;

            foreach (Forsakring f in query)
            {
                Foretag.Add(f);
            }
            return Foretag;
        }
        //Hämtar grundbelopp till VuxenFörsakring
        public List<ForsakringsUtbud> HamtarGrundBeloppTillVuxenF()
        {
            List<ForsakringsUtbud> grunduppgifter = new List<ForsakringsUtbud>();

            var grunduppgift =
                from grund in databas.ForsakringsUtbuds
                where grund.forsakringsTyp == "Sjuk- och olycksfallsförsäkring för vuxen"
                select grund;

            foreach (ForsakringsUtbud g in grunduppgift)
            {
                grunduppgifter.Add(g);
            }

            return grunduppgifter;

        }
        //Hämtar grundbelopp till Livsförsäkring
        public List<ForsakringsUtbud> HamtarGrundBeloppTillLivsF()
        {
            List<ForsakringsUtbud> grunduppgifter = new List<ForsakringsUtbud>();

            var grunduppgift =
                from grund in databas.ForsakringsUtbuds
                where grund.forsakringsTyp == "Livförsäkring vuxen"
                select grund;

            foreach (ForsakringsUtbud g in grunduppgift)
            {
                grunduppgifter.Add(g);
            }

            return grunduppgifter;

        }
        //Hämtar grundbelopp till Barnförsäkring
        public List<ForsakringsUtbud> HamtarGrundBeloppTillBarnF()
        {
            List<ForsakringsUtbud> grunduppgifter = new List<ForsakringsUtbud>();

            var grunduppgift =
                from grund in databas.ForsakringsUtbuds
                where grund.forsakringsTyp == "Sjuk- och olycksfallförsäkring för barn" 
                select grund;

            foreach (ForsakringsUtbud g in grunduppgift)
            {
                grunduppgifter.Add(g);
            }

            return grunduppgifter;
 
        }
        //Hämtar grundbelopp till Tillval Sjukersättning
        public List<ForsakringsUtbud> HamtarGrundBeloppTillTillvalSjukErsattning()
        {
            List<ForsakringsUtbud> grunduppgifter = new List<ForsakringsUtbud>();

            var grunduppgift =
                from grund in databas.ForsakringsUtbuds
                where grund.forsakringsTyp == "Tillval - Sjukersättning"
                select grund;

            foreach (ForsakringsUtbud g in grunduppgift)
            {
                grunduppgifter.Add(g);
            }

            return grunduppgifter;
        }
        //Hämtar grundbelopp till Tillval Sjuk och olycksfall
        public List<ForsakringsUtbud> HamtarGrundBeloppTillTillvalSjuk()
        {
            List<ForsakringsUtbud> grunduppgifter = new List<ForsakringsUtbud>();

            var grunduppgift =
                from grund in databas.ForsakringsUtbuds
                where grund.forsakringsTyp == "Tillval - Sjuk och olycksfall"
                select grund;

            foreach (ForsakringsUtbud g in grunduppgift)
            {
                grunduppgifter.Add(g);
            }

            return grunduppgifter;

        }
        //Hämtar grundbelopp av samma typ ex. "Sjuk Och Olycksfallsförsäkring" grundbeloppen
        public List<ForsakringsUtbud> HamtaAnstalldViaforsakringstyp(string forsakringstyp)
        {
            var query =
                from b in databas.ForsakringsUtbuds
                where b.forsakringsTyp.Contains(forsakringstyp)
                select b;
            List<ForsakringsUtbud> ret = query.ToList();
            return ret;
        }
        //Hämtar provision
        public List<Provision> HamtaProvision()
        {
            List<Provision> provision = new List<Provision>();

            var query =
                from prov in databas.Provisions
                select prov;

            foreach (Provision g in query)
            {
                provision.Add(g);
            }

            return provision;
        }
        //Hämtar kundprospekt
        public List<Forsakring> HamtaKundprospekt()
        {
            List<Forsakring> h = new List<Forsakring>();

            var query =
                from f in databas.Forsakrings
                where f.fTyp == "Sjuk- och olycksfallförsäkring för barn" 
                && f.fTyp != "Sjuk- och olycksfallsförsäkring för vuxen"
                select f;

            foreach (Forsakring f in query)
            {
                h.Add(f);
            }
            return h;
        }
        //Hämta all statistik för barnförsäkringar
        public List<Forsakring> HamtaStatistikBarn(int agenturnr)
        {
            List<Forsakring> statistik = new List<Forsakring>();
            var query =
                from f in databas.Forsakrings
                where f.betald == "Ja" && f.agenturNr == agenturnr && f.fTyp == "Sjuk- och olycksfallförsäkring för barn"
                select f;
            foreach (Forsakring e in query)
            {
                statistik.Add(e);
            }
            return statistik;
        }
        //Hämta all statistik för vuxen försäkringar
        public List<Forsakring> HamtaStatistikVuxen(int agenturnr)
        {
            List<Forsakring> statistik = new List<Forsakring>();
            var query =
                from f in databas.Forsakrings
                where f.betald == "Ja" && f.agenturNr == agenturnr && f.fTyp == "Sjuk- och olycksfallsförsäkring för vuxen"
                select f;
            foreach (Forsakring e in query)
            {
                statistik.Add(e);
            }
            return statistik;
        }
        //Hämtarackvärde
        public ForsakringsUtbud hamtaAckvarde(string ftyp, decimal grundbelopp)
        {
            ForsakringsUtbud a = new ForsakringsUtbud();
            try
            {
                var query =
                    (from fu in databas.ForsakringsUtbuds
                     where fu.forsakringsTyp == ftyp && fu.grundbelopp == grundbelopp
                     select fu).Single();
                return query;
            }
            catch { return a; }
        }
        //Hämtar försäkringar
        public List<Forsakring> HamtaForsakringar(int agenturNr, DateTime frandatum, DateTime tilldatum)
        {
            var query =
               from f in databas.Forsakrings
               where f.agenturNr == agenturNr && f.betaldDatum >= frandatum && f.betaldDatum <= tilldatum
               select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        
        
        #endregion
                
        #region//Lägga till funktioner
        //Ger behörighet
        public void addBehorighet(Int64 personnummer, int behorighet)
        {
            Anstalld b = new Anstalld();
            b.personNr = personnummer;
            b.behorighetsID = behorighet;

            databas.Anstallds.InsertOnSubmit(b);
            databas.SubmitChanges();
        }
        //lägga till en ny anställd
        public void addAnstalld(string forNamn, string efterNamn, Int64 personNummer, string adress, int postNummer, Int64 teleNummer,
             string ort, string teleTyp, int agenturNummer, decimal skatteSats, string befattning, string losenord, string epost, int behorighetsID)
        {
            Anstalld a = new Anstalld();
            AnstalldPostNr ap = new AnstalldPostNr();
            AnstalldTelefon at = new AnstalldTelefon();

            a.fNamn = forNamn;
            a.eNamn = efterNamn;
            a.personNr = personNummer;
            a.gatuadress = adress;
            a.postNr = postNummer;
            ap.postNr = postNummer;
            ap.ort = ort;
            ap.personNr = personNummer;
            at.teleNr = teleNummer;
            at.typ = teleTyp;
            at.personNr = personNummer;
            a.agenturNr = agenturNummer;
            a.skattesats = skatteSats;
            a.befattning = befattning;
            a.losenord = losenord;
            a.epost = epost;
            a.behorighetsID = behorighetsID;

            databas.Anstallds.InsertOnSubmit(a);
            databas.AnstalldPostNrs.InsertOnSubmit(ap);
            databas.AnstalldTelefons.InsertOnSubmit(at);
            databas.SubmitChanges();
        }

        //lägga till en ny personförsäkring
        public void addPersonForsakring(string efterNamn, string forNamn, Int64 personNr, string adress, int postNr, string ort, Int64 telefonHem, 
            Int64 telefonArbete, string ePost, string fefterNamn, string fforNamn, Int64 fpersonNr, DateTime ankomstDatum, string forsakringsTyp,
            string sjukOlycksfallTillval, string livsForsakringTillval, decimal livsForsakringsGrundbelopp, string sjukSkrivningsTillval,
            string betalningsform, decimal grundbelopp, int agenturNr, decimal sjukskrivGrundbelopp, decimal sjukolycksGrundbelopp, string ftypen)
        {
            int ftagareId = getHighestFtagareId();

            Forsakring forsakring = new Forsakring();
            Forsakringstagare forsakringstagare = new Forsakringstagare();

            if (personNr != 0)
            {
                forsakringstagare.personNr = personNr;
                forsakringstagare.eNamn = efterNamn;
                forsakringstagare.fNamn = forNamn;
            }
            if (postNr != 0 )
            {
                forsakringstagare.postNr = postNr;
                
            }
            if (telefonHem != 0)
            {
                forsakringstagare.teleNrHem = telefonHem;
            }
            if (telefonArbete != 0)
            {
                forsakringstagare.teleNrArbete = telefonArbete;
            }
            if (fpersonNr != 0)
            {
                forsakring.personNr = fpersonNr;
                forsakring.fNamn = fforNamn;
                forsakring.eNamn = fefterNamn;
            }
            if (grundbelopp != 0)
            {
                forsakring.grundbelopp = grundbelopp;
            }
            if (sjukolycksGrundbelopp != 0)
            {
                forsakring.sjukolycksgrundbelopp = sjukolycksGrundbelopp;
                forsakring.sjukOcholycksfall = sjukOlycksfallTillval;
            }
            if (livsForsakringsGrundbelopp != 0)
            {
                forsakring.livgrundbelopp = livsForsakringsGrundbelopp;
                forsakring.hojningLiv = livsForsakringTillval;
            }
            if (sjukskrivGrundbelopp != 0)
            {
                forsakring.sjukskrivgrundbelopp = sjukskrivGrundbelopp;
                forsakring.sjukskrivning = sjukSkrivningsTillval;
            }

            forsakringstagare.ort = ort;
            forsakringstagare.gatuadress = adress;
            forsakringstagare.epost = ePost;
            forsakringstagare.fTagareID = ftagareId;
            forsakring.fTagareID = ftagareId;
            forsakring.ankomstDatum = ankomstDatum;
            forsakring.betalningsPeriod = betalningsform;
            forsakring.agenturNr = agenturNr;
            forsakring.fTyp = forsakringsTyp;
            forsakring.forsakringstyp = ftypen;

            databas.Forsakringstagares.InsertOnSubmit(forsakringstagare);
            databas.SubmitChanges();
            databas.Forsakrings.InsertOnSubmit(forsakring);
            databas.SubmitChanges();          
        }
       
        //lägga till en ny övrigpersonförsäkring
        public void addOvrigpersonForsakring(string efterNamn, string forNamn, Int64 personNr, string foretagsNamn,
          Int64 orgNr, string adress, string ort, int postNr, Int64 telefonHem, Int64 telefonArbete, string ePost,
          string fefterNamn, string fforNamn, Int64 fpersonNr, Int64 premie, string tabell, string betalningsform, int agentNr, string ftypen)
        {
            int ftagaresID = getHighestFtagareId();

            Forsakring forsakring = new Forsakring();
            Forsakringstagare forsakringstagare = new Forsakringstagare();
            if (postNr != 0)
            {
                forsakringstagare.postNr = postNr;   
            }
            if (telefonArbete != 0)
            {
                forsakringstagare.teleNrArbete = telefonArbete;
            }
            if (telefonHem != 0)
            {
                forsakringstagare.teleNrHem = telefonHem;
            }
            if (fpersonNr != 0)
            {
                forsakring.eNamn = fefterNamn;
                forsakring.fNamn = fforNamn;
                forsakring.personNr = fpersonNr;
            }
            if (premie != 0)
            {
                forsakring.oPremie = premie;
            }
            if (orgNr !=0)
            {
                forsakringstagare.orgNr = orgNr;
                forsakringstagare.foretagsnamn = foretagsNamn;
                forsakring.OrgNr = orgNr;
            }
            if (personNr != 0)
            {
                forsakringstagare.eNamn = efterNamn;
                forsakringstagare.fNamn = forNamn;
                forsakringstagare.personNr = personNr;
            }
            forsakringstagare.fTagareID = ftagaresID;
            forsakringstagare.ort = ort;
            forsakring.betalningsPeriod = betalningsform;
            forsakring.agenturNr = agentNr;
            forsakring.tabell = tabell;
            forsakring.fTagareID = ftagaresID;
            forsakring.forsakringstyp = ftypen;
            forsakringstagare.epost = ePost;
            forsakringstagare.gatuadress = adress;

            databas.Forsakrings.InsertOnSubmit(forsakring);
            databas.SubmitChanges();
            databas.Forsakringstagares.InsertOnSubmit(forsakringstagare);
            databas.SubmitChanges();
        }

        //lägga till en ny företagsförsäkring
        public void addForetagsForsakring(string namn, Int64 orgNr, string kontaktperson, string adress, int postNr, string ort, Int64 teleNr,
            Int64 faxNr, string forsakringsBolag, string forsakringsTyp, string betalningsPeriod, DateTime begynnelseDatum,
            DateTime forfalloDag, Int64 fPremie, int agenturNr, string anteckning, string ftypen, string epost)
        {
            int ftagaresID = getHighestFtagareId();

            Forsakring forsakring = new Forsakring();
            Forsakringstagare forsakringstagare = new Forsakringstagare();

            forsakringstagare.foretagsnamn = namn;
            forsakringstagare.orgNr = orgNr;
            forsakringstagare.fTagareID = ftagaresID;
            forsakringstagare.postNr = postNr;
            forsakringstagare.ort = ort;
            forsakringstagare.gatuadress = adress;
            forsakringstagare.teleNrArbete = teleNr;
            forsakringstagare.faxNr= faxNr;
            forsakringstagare.postNr = postNr;
            forsakringstagare.epost = epost;            
            forsakring.kontaktPerson = kontaktperson;
            forsakring.forsakringsBolag = forsakringsBolag;
            forsakring.fPremie = fPremie;
            forsakring.agenturNr = agenturNr;
            forsakring.anteckning = anteckning;
            forsakring.fTyp = forsakringsTyp;
            forsakring.betalningsPeriod = betalningsPeriod;
            forsakring.begynnelseDatum = begynnelseDatum;
            forsakring.forfallodag = forfalloDag;
            forsakring.forsakringstyp = ftypen;
            forsakring.fTagareID = ftagaresID;

            databas.Forsakrings.InsertOnSubmit(forsakring);
            databas.SubmitChanges();
            databas.Forsakringstagares.InsertOnSubmit(forsakringstagare);
            databas.SubmitChanges();
        }
        //Lägger till grundbelopp
        public void addGrundbelopp(string forsakringstyp, DateTime datum, decimal grundbelopp, decimal ackvarde)
        {
            ForsakringsUtbud f = new ForsakringsUtbud();
            int grunddataID = getHighestgrundDataId();
            
            f.forsakringsTyp = forsakringstyp;
            f.grundbelopp = grundbelopp;
            f.ackvarde = ackvarde;
            f.datum = datum;
            f.grundDataID = grunddataID;
            databas.ForsakringsUtbuds.InsertOnSubmit(f);
            databas.SubmitChanges();
        }

        //Lägger till provision 
        public void addProvision(DateTime kalenderar, decimal provandelbarn, decimal provandelvuxen, decimal totMin, decimal totMax)
        {
            Provision f = new Provision();
            int provisionsID = getHighestProvisionId();

            f.provisionID = provisionsID;
            f.kalenderAr = kalenderar;
            f.provisionAndelBarn = provandelbarn;
            f.provisionAndelVuxen = provandelvuxen;
            f.totMinackVärde = totMin;
            f.totMaxackVärde = totMax;

            databas.Provisions.InsertOnSubmit(f);
            databas.SubmitChanges();
        }
        #endregion

        #region//Tabort funktioner

        //Ta bort grundbelopp
        public void RemoveGrundbelopp(int grunddataId)
        {
            var query =
                from a in databas.ForsakringsUtbuds
                where a.grundDataID == grunddataId
                select a;

            foreach (var a in query)
            {
                databas.ForsakringsUtbuds.DeleteOnSubmit(a);
            }
            databas.SubmitChanges();
        }
        //Ta bort provision
        public void RemoveProvision(int provId)
        {
            var query =
                from a in databas.Provisions
                where a.provisionID == provId
                select a;

            foreach (var a in query)
            {
                databas.Provisions.DeleteOnSubmit(a);
            }
            databas.SubmitChanges();
        }
        //Ta bort anställd
        public void removeAnstalld(long personNr)
        {
            var query =
                from a in databas.Anstallds
                where a.personNr == personNr
                select a;

            var query2 =
                from ap in databas.AnstalldPostNrs
                where ap.personNr == personNr
                select ap;

            var query3 =
                from at in databas.AnstalldTelefons
                where at.personNr == personNr
                select at;

            foreach (var a in query)
            {
                databas.Anstallds.DeleteOnSubmit(a);
            }
            foreach (var ap in query2)
            {
                databas.AnstalldPostNrs.DeleteOnSubmit(ap);
            }
            foreach (var at in query3)
            {
                databas.AnstalldTelefons.DeleteOnSubmit(at);
            }
            databas.SubmitChanges();
        }
        //Ta bort övrigPerson
        public void removeOvrigPerson(int ftagareID)
        {
            var query =
              from a in databas.Forsakrings
              where a.fTagareID == ftagareID
              select a;
            var query3 =
                from at in databas.Forsakringstagares
                where at.fTagareID == ftagareID
                select at;

            foreach (var a in query)
            {
                databas.Forsakrings.DeleteOnSubmit(a);
            }
            foreach (var at in query3)
            {
                databas.Forsakringstagares.DeleteOnSubmit(at);
            }

            databas.SubmitChanges();
        }

        //Ta bort Personförsäkring
        public void removePersonForsakring(int ftagareID)
        {
            var query =
                from a in databas.Forsakringstagares
                where a.fTagareID == ftagareID
                select a;

            var query4 =
                from at in databas.Forsakrings
                where at.fTagareID == ftagareID
                select at;

            foreach (var a in query)
            {
                databas.Forsakringstagares.DeleteOnSubmit(a);
            }
            foreach (var at in query4)
            {
                databas.Forsakrings.DeleteOnSubmit(at);
            }

            databas.SubmitChanges();
        }

        //Ta bort Företagsförsäkring
        public void removeForetagsForsakring(int ftagareID)
        {
            var query =
                from a in databas.Forsakringstagares
                where a.fTagareID == ftagareID
                select a;

            var query2 =
                from at in databas.Forsakrings
                where at.fTagareID == ftagareID
                select at;

            foreach (var a in query)
            {
                databas.Forsakringstagares.DeleteOnSubmit(a);
            }
            foreach (var at in query2)
            {
                databas.Forsakrings.DeleteOnSubmit(at);
            }
            databas.SubmitChanges();
        }
        #endregion

        #region//Uppdateringar
        //Uppdatera provision
        public void UppdateraProv(int provid, DateTime kalenderar, decimal totMin, decimal totMax, decimal andelBarn, decimal andelVuxna)
        {
            var query =
                from m in databas.Provisions
                where m.provisionID == provid
                select m;

            foreach (Provision m in query)
            {
                m.provisionID = provid;
                m.kalenderAr = kalenderar;
                m.totMinackVärde = totMin;
                m.totMaxackVärde = totMax;
                m.provisionAndelBarn = andelBarn;
                m.provisionAndelVuxen = andelVuxna;
            }

            databas.SubmitChanges();
        }
        //Uppdatera utskriftdatum
        public void uppdateraUtskriftsdatum(int personnr, DateTime utskrifsdatum)
        {
            var query =
                    from m in databas.Forsakrings
                    where m.Forsakringstagare.personNr == personnr
                    select m;

            foreach (Forsakring m in query)
            {
                m.Forsakringstagare.personNr = personnr;
                m.utskriftsdatum = utskrifsdatum;
            }

            databas.SubmitChanges();
        } 
        //Uppdatera Anställd
        public void uppdateraAnstalld(string forNamn, string efterNamn, Int64 personNummer, string adress, int postNummer, Int64 teleNummer,
             string ort, string teleTyp, int agenturNummer, decimal skatteSats, string befattning, string losenord, string epost, int behorighetsID)
        {
            var query =
                from m in databas.Anstallds
                where m.personNr == personNummer
                select m;

            var query2 =
                from a in databas.AnstalldPostNrs
                where a.personNr == personNummer
                select a;

            var query3 =
                from t in databas.AnstalldTelefons
                where t.personNr == personNummer
                select t;

            foreach (Anstalld m in query)
            {
                m.fNamn = forNamn;
                m.eNamn = efterNamn;
                m.personNr = personNummer;
                m.gatuadress = adress;
                m.epost = epost;
                m.befattning = befattning;
                m.agenturNr = agenturNummer;
                m.losenord = losenord;
                m.postNr = postNummer;
                m.behorighetsID = behorighetsID;
                m.skattesats = skatteSats;
            }
            foreach (AnstalldPostNr a in query2)
            {
                a.personNr = personNummer;
                a.postNr = postNummer;
                a.ort = ort;
            }
            foreach (AnstalldTelefon t in query3)
            {
                t.personNr = personNummer;
                t.teleNr = teleNummer;
                t.typ = teleTyp;
            }
            databas.SubmitChanges();
        }
        //Uppdatera grundbelopp
        public void UppdateraGrundbelopp(int grunddataid, string forsakringstyp, DateTime datum, Int64 grundbelopp, decimal ackvarde)
        {
            var query =
                from m in databas.ForsakringsUtbuds
                where m.grundDataID == grunddataid
                select m;

            foreach (ForsakringsUtbud m in query)
            {
                //m.grundDataID = grunddataid;
                m.grundbelopp = grundbelopp;
                m.forsakringsTyp = forsakringstyp;
                m.datum = datum;
                m.ackvarde = ackvarde;
            }

            databas.SubmitChanges();
        }
        //Uppdatera personförsäkring
        public void uppdateraPersonforsakringar(string efterNamn, string forNamn, Int64 personNr, string adress, int postNr, string ort, Int64 telefonHem,
            Int64 telefonArbete, string ePost, string fefterNamn, string fforNamn, Int64 fpersonNr, DateTime ankomstDatum, string forsakringsTyp,
            string sjukOlycksfallTillval, string livsForsakringTillval, decimal livsForsakringsGrundbelopp, string sjukSkrivningsTillval,
            string betalningsform, decimal grundbelopp, int agenturNr, decimal sjukskrivGrundbelopp, decimal sjukolycksGrundbelopp, int ftagareID)
        {
            var query3 =
                from t in databas.Forsakringstagares
                where t.fTagareID == ftagareID
                select t;

            var query5 =
                from t in databas.Forsakrings
                where t.fTagareID == ftagareID
                select t;

            foreach (Forsakringstagare t in query3)
            {
                t.fTagareID = ftagareID; 
                t.personNr = personNr;
                t.fNamn = forNamn;
                t.eNamn = efterNamn;
                t.epost = ePost;
                t.gatuadress = adress;
                t.postNr = postNr;
                t.ort = ort;
                t.teleNrArbete = telefonArbete;
                t.teleNrHem = telefonHem;
                               
            }
            foreach (Forsakring t in query5)
            {
                t.fTagareID = ftagareID;
                t.agenturNr = agenturNr;
                t.ankomstDatum = ankomstDatum;
                t.fTyp = forsakringsTyp;
                t.sjukOcholycksfall = sjukOlycksfallTillval;
                t.sjukskrivning = sjukSkrivningsTillval;
                t.hojningLiv = livsForsakringTillval;
                t.livgrundbelopp = livsForsakringsGrundbelopp;
                t.sjukolycksgrundbelopp = sjukolycksGrundbelopp;
                t.sjukskrivgrundbelopp = sjukskrivGrundbelopp;
                t.betalningsPeriod = betalningsform;
                t.grundbelopp = grundbelopp;
                t.personNr = fpersonNr;
                t.eNamn = fefterNamn;
                t.fNamn = fefterNamn;                
            }
            databas.SubmitChanges();
        }

        //Uppdatera övrigpersonförsäkring
        public void uppdateraOvrigPersonforsakring(string efterNamn, string forNamn, Int64 personNr, string foretagsNamn,
          Int64 orgNr, string adress, string ort, int postNr, int telefonHem, int telefonArbete, string ePost,
          string fefterNamn, string fforNamn, Int64 fpersonNr, int premie, string tabell, string betalningsform, int agenturNr, int ftagareID)
        {
            var query3 =
                from t in databas.Forsakringstagares
                where t.fTagareID == ftagareID
                select t;

            var query5 =
                from t in databas.Forsakrings
                where t.fTagareID == ftagareID
                select t;

            foreach (Forsakringstagare t in query3)
            {
                t.fTagareID = ftagareID;
                t.orgNr = orgNr;
                t.personNr = personNr;
                t.epost = ePost;
                t.gatuadress = adress;
                t.teleNrArbete = telefonArbete;
                t.teleNrHem = telefonHem;
                t.fNamn = forNamn;
                t.eNamn = efterNamn;
                t.personNr = personNr;
                t.postNr = postNr;
                t.ort = ort;
                t.orgNr = orgNr;
                t.foretagsnamn = foretagsNamn;
            }
            foreach (Forsakring t in query5)
            {
                t.fTagareID = ftagareID;
                t.agenturNr = agenturNr;
                t.oPremie = premie;
                t.betalningsPeriod = betalningsform;
                t.tabell = tabell;
                t.personNr = personNr;
                t.personNr = fpersonNr;
                t.eNamn = fefterNamn;
                t.fNamn = fforNamn;                
            }
            databas.SubmitChanges();
        }

        //Uppdatera företagsförsäkring
        public void uppdateraForetagForsakring(string namn, Int64 orgNr, string kontaktperson, string adress, int postNr, string ort, 
            int teleNr, int faxNr, string forsakringsBolag, string forsakringsTyp, string betalningsPeriod, DateTime begynnelseDatum, 
            DateTime forfalloDag, int fPremie, string anteckning, int agenturNr, int ftagareID, string epost)
        {
            var query1 =
                from t in databas.Forsakringstagares
                where t.fTagareID == ftagareID
                select t;

            var query3 =
                from t in databas.Forsakrings
                where t.fTagareID == ftagareID
                select t;

            foreach (Forsakringstagare t in query1)
            {
                t.orgNr = orgNr;
                t.gatuadress = adress;
                t.teleNrArbete = teleNr;
                t.faxNr = faxNr;
                t.postNr = postNr;
                t.ort = ort;
                t.orgNr = orgNr;
                t.foretagsnamn = namn;
                t.fTagareID = ftagareID;
                t.epost = epost;
            }
            foreach (Forsakring t in query3)
            {
                t.kontaktPerson = kontaktperson;
                t.forsakringsBolag = forsakringsBolag;
                t.fTyp = forsakringsTyp;
                t.betalningsPeriod = betalningsPeriod;
                t.begynnelseDatum = begynnelseDatum;
                t.forfallodag = forfalloDag;
                t.fPremie = fPremie;
                t.anteckning = anteckning;
                t.agenturNr = agenturNr;
                t.OrgNr = orgNr;
                t.fTagareID = ftagareID;
            }
            databas.SubmitChanges();
        }

        public void uppdateraTecknadforsakringForetag(Int64 lopnr, DateTime betaldDatum, string forsakringsnr, decimal provision, string betald)
        {
            var query1 =
                from t in databas.Forsakrings
                where t.lopNr == lopnr
                select t;

            foreach (Forsakring f in query1)
            {
                f.lopNr = lopnr;
                f.betaldDatum = betaldDatum;
                f.forsakringsNr = forsakringsnr;
                f.provisionOvrig = provision;
                f.betald = betald;
                f.sjukolycksgrundbelopp = 0;
                f.sjukskrivgrundbelopp = 0;
                f.livgrundbelopp = 0;

            }
            databas.SubmitChanges();
        }

        public void uppdateraTecknadforsakringPersonOvrigt(Int64 lopnr, DateTime betaldDatum, string forsakringsnr, decimal grundbelopp, decimal
            sjukolycksfallgrundbelopp, decimal sjukskrivgrundbelopp, decimal livgrundbelopp, string betald, decimal provision)
        {
            var query1 =
                from t in databas.Forsakrings
                where t.lopNr == lopnr
                select t;

            foreach (Forsakring f in query1)
            {
                f.lopNr = lopnr;
                f.betaldDatum = betaldDatum;
                f.forsakringsNr = forsakringsnr;
                f.grundbelopp = grundbelopp;
                f.sjukolycksgrundbelopp = sjukolycksfallgrundbelopp;
                f.sjukskrivgrundbelopp = sjukskrivgrundbelopp;
                f.livgrundbelopp = livgrundbelopp;
                f.betald = betald;
                f.provisionOvrig = provision;
            }
            databas.SubmitChanges(); 
        }

        #endregion
      
        #region Sök företag
        //Sökning av företag via orgnr
        public Forsakring SokForetagViaOrgNr(int fTagareID)
        {
            var query =
                (from f in databas.Forsakrings
                 where f.fTagareID == fTagareID
                 select f).Single();
            return query;
        }
        //Sökning av företag via ftagarid
        public Forsakring SokOverigPerson(int fTagareID)
        {
            var query =
                (from f in databas.Forsakrings
                 where f.fTagareID == fTagareID
                 select f).Single();
            return query;
        }
        //Sökning av företag via företagsnamn
        public List<Forsakring> SokForetagViaNamn(string foretagsNamn)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.Forsakringstagare.foretagsnamn.Contains(foretagsNamn)
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning av företag via agenturnr
        public List<Forsakring> SokForetagViaAgnr(Int64 agnr)
        {
            var query =
                from b in databas.Forsakrings
                where b.agenturNr == agnr && b.forsakringstyp == "Foretag"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning av företag via ftagarid
        public List<Forsakring> SokForetagViaOrgNrftagare(int ftagarid)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.fTagareID == ftagarid
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning av företag via orgnr
        public List<Forsakring> SokForetagViaOrgnr(Int64 orgNr)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.OrgNr == orgNr
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        
        #endregion

        #region Sök anställd
        //Sökning av anställd via agenturnr
        public List<Anstalld> SokAnstalldViaAgentNr(int agenturNr)
        {
            var query =
                from b in databas.Anstallds
                where b.agenturNr == agenturNr
                 select b;
            List<Anstalld> ret = query.ToList();
            return ret;
        }
        //Sökning av anställd via efternamn
        public List<Anstalld> SokAnstalldViaENamn(string eNamn)
        {
            var query =
                from b in databas.Anstallds
                 where b.eNamn.Contains(eNamn)
                 select b;
            List<Anstalld> ret = query.ToList();
            return ret;

        }
        //Sökning av anställd via personnr
        public AnstalldPostNr SokAnstalldViaPersNr(long persNr)
        {
            try
            {
                var query =
                    (from b in databas.AnstalldPostNrs
                     where b.personNr == persNr
                     select b).Single();
                return query;
            }
            catch { return null; }

        }
        //Sökning av anställd via telenr
        public AnstalldTelefon SokAnstalldViaTeleNr(Int64 persNr)
        {
            var query =
                (from b in databas.AnstalldTelefons
                 where b.personNr == persNr
                 select b).Single();
            return query;
        }
        
        #endregion
        
        #region Sökning av Tecknadförsäkring
        //Sökning av Tecknadförsäkring via orgnr
        public List<Forsakring> SokTFOrgNr(Int64 OrgNr)
        {
            var query =
                from b in databas.Forsakrings
                where b.OrgNr == OrgNr
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning av Tecknadförsäkring via personnr
        public List<Forsakring> SokTF(Int64 personNr)
        {
            var query =
                from b in databas.Forsakrings
                where b.personNr == personNr
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        
        #endregion

        #region Sökning av personförsäkring
        
        //Sökning för personförsäkring via personnr
        public List<Forsakring> SokPersonForsakringViaPersonNr(Int64 personNr)
        {
            var query =
                from b in databas.Forsakrings
                where b.Forsakringstagare.personNr == personNr && b.forsakringstyp == "Person"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för personförsäkring via försäkrad personnr
        public List<Forsakring> SokPersonForsakringViaFPersonNr(Int64 personNr)
        {
            var query =
                from b in databas.Forsakrings
                where b.personNr == personNr && b.forsakringstyp == "Person"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för personförsäkring via efternamn
        public List<Forsakring> SokPersonForsakringViaEnamn(string eNamn)
        {
            var query =
                from b in databas.Forsakrings
                where b.eNamn.Contains(eNamn) && b.forsakringstyp == "Person"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;

        }
        //Sökning för personförsäkring via försäkrad förnamn
        public List<Forsakring> SokPersonForsakringViafNamn(string fNamn)
        {
            var query =
                from b in databas.Forsakrings
                where b.fNamn.Contains(fNamn) && b.forsakringstyp == "Person"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;

        }
        //Sökning för personförsäkring via försäkrad efternamn
        public List<Forsakring> SokPersonForsakringViaFeNamn(string eNamn)
        {
            var query =
                from b in databas.Forsakrings
                where b.Forsakringstagare.eNamn.Contains(eNamn) && b.forsakringstyp == "Person"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;

        }
        //Sökning för personförsäkring via agenturnr
        public List<Forsakring> SokPersonForsakringViaAgnr(Int64 agnr)
        {
            var query =
                from b in databas.Forsakrings
                where b.agenturNr == agnr && b.forsakringstyp == "Person"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        #endregion

        #region Sökning av Övriga
        //Sökning för övrig personförsäkring via företagsnamn
        public List<Forsakring> SokOvrigForetagViaFNamn(string foretagsNamn)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.Forsakringstagare.foretagsnamn.Contains(foretagsNamn) && f.forsakringstyp == "Ovrig"
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;

        }
        //Sökning för övrig personförsäkring via efternamn
        public List<Forsakring> SokOvrigViaeNamn(string eNamn)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.Forsakringstagare.eNamn.Contains(eNamn) && f.forsakringstyp == "Ovrig"
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för övrig personförsäkring via personnr
        public List<Forsakring> SokOvrigViaPersonNr(Int64 personnr)
        {
            var query =
                from f in databas.Forsakrings
                where f.Forsakringstagare.personNr == personnr && f.forsakringstyp == "Ovrig"
                select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för övrig personförsäkring via orgnaisationsnr
        public List<Forsakring> SokOvrigViaOrgNr(Int64 orgnr)
        {
            var query =
                from f in databas.Forsakrings
                where f.OrgNr == orgnr && f.forsakringstyp == "Ovrig"
                select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för övrig personförsäkring via agenturnr
        public List<Forsakring> SokOvrigForsakringViaAgnr(Int64 agnr)
        {
            var query =
                from b in databas.Forsakrings
                where b.agenturNr == agnr && b.forsakringstyp == "Ovrig"
                select b;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för övrig personförsäkring via försäkrad personnr
        public List<Forsakring> SokOvrigViaFpersonNr(Int64 personnr)
        {
            var query =
                from f in databas.Forsakrings
                where f.personNr == personnr && f.forsakringstyp == "Ovrig"
                select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för övrig personförsäkring via försäkrad förnamn
        public List<Forsakring> SokOvrigViaFNamn(string fNamn)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.fNamn.Contains(fNamn) && f.forsakringstyp == "Ovrig"
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        //Sökning för övrig personförsäkring via försäkrad efternamn
        public List<Forsakring> SokOvrigViafeNamn(string eNamn)
        {
            var query =
                 from f in databas.Forsakrings
                 where f.eNamn.Contains(eNamn) && f.forsakringstyp == "Ovrig"
                 select f;
            List<Forsakring> ret = query.ToList();
            return ret;
        }
        #endregion










    }
}